Advancements in computing technologies have enabled transformation of computers from high-cost, low functionality devices that could be employed for basic mathematical calculations to low-cost, high functionality devices that can be utilized for word-processing, instantaneous communications between friends and family, bill payment, entertainment, and the like. To enable this leap in functionality over a relatively short period of time, size of transistors has been greatly reduced, thereby enabling integrated circuits to be associated with significant amounts of memory as well as increased processing speed (due to a number of transistors that can be located on a single integrated circuit). These advancements in turn have led to creation of more robust and flexible programming environments, which are employed by computer programmers to generate applications and/or improve existing applications. In more detail, a plurality of programming languages now exist, where a programmer can select a particular language based on familiarity and/or functionality associated with a selected language.
In more detail, programming languages are formal languages employed specifically to communicate instructions to computers or microprocessors for task execution. Through the years, object oriented programming has become one of many familiar and popular models designers and programmers utilize to implement functionality within computer systems. Object oriented programming is unique from other programming languages because it is premised on viewing programming in terms of objects or things rather than actions like other models.
The benefit of object technology arises out of three basic principles: encapsulation, polymorphism and inheritance. Objects hide or encapsulate the internal structure of their data and associated methods. Instead of exposing implementation details, objects present interfaces that represent their abstractions cleanly without extraneous information. Polymorphism takes encapsulation one-step further. Polymorphism allows the use of the same code for different data types—the idea being many shapes, one interface. Hence, a software component can make a request of another component without knowing exactly what that component is. The component that receives the request interprets it and figures out according to its variables and data how to execute the request. The third principle is inheritance, which enables developers to reuse pre-existing design and code. This capability allows developers to avoid creating all software from scratch. Rather, through inheritance, developers can derive subclasses that inherit and modify both state and behaviors of other classes.
The object oriented programming model is often defined via a class-based approach. In this system, objects are entities including both state and behavior. Both the state and behavior of an object are defined by a class, which identifies objects of a particular type. An object created based on a class definition is considered an instance of that class reflected in a dynamic type. Thus, a class specifies the data (e.g., state) that the object can contain as well as methods, functions, or behaviors that the object can perform. Methods operate to modify the internal state of the associated objects by altering the data contained therein. The combination of such data and methods in objects is often referred to as encapsulation in object-oriented programming. Encapsulation provides for the state of an object to be changed only by well-defined methods associated with the object. When the behavior of an object is confined to such well-defined locations and interfaces, changes (e.g., code modifications) in the object will have minimal impact on the other objects and elements in the system.
A current deficiency associated with object oriented programming is that it is difficult to automatically create a new object based upon existing objects, application context, and the like, and it is further difficult to modify existing objects (e.g., modify relationships between existing objects). Rather, a skilled programmer may be forced to generate a plurality of additional objects, wherein each object is utilized for disparate contexts. Existing frameworks for object-oriented programming do not allow customized strategies to be implemented in connection with composing objects.